package encoding.convert;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 操作文本文档时，尽量使用字符流。字节流容易产生乱码问题。<br>
 * 字符转换<br>
 * 此处使用的是子接流
 */
public class EncodingConvert2 {
	public static void main(String[] args) throws Exception {
		String filePath = "D:\\abc.java";

		CpdetectorEncoding ce = new CpdetectorEncoding();
		String charset = ce.getEncoding(filePath, false).name();
		System.out.println(charset);

		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
		StringBuffer sb = new StringBuffer();
		byte[] buf = new byte[1024];
		int read;
		while ((read = bis.read(buf)) != -1) {
			// 通过使用指定的 charset 解码指定的 byte 数组，构造一个新的 String
			String str = new String(buf, 0, read, charset);
			sb.append(str);
		}
		bis.close();
		
		FileOutputStream fos = new FileOutputStream(filePath);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		// 使用给定的 charset 将此 String 编码到 byte 序列，并将结果存储到新的 byte 数组。
		byte[] bytes = sb.toString().getBytes("UTF-8");
		bos.write(bytes);
		bos.close();
	}

}
